﻿using Basefr.Core.Consts.Enums;
using Basefr.Core.Contracts;

namespace Basefr.Core.Entities
{
    public interface IUpdating<T> where T : EntityBase
    {
        /// <summary>
        /// 变更状态
        /// </summary>
        EnumUpdateState UpdateState { get; set; }

        /// <summary>
        /// 建立快照
        /// </summary>
        T CreateSnapshot(IRepository repo);

        /// <summary>
        /// 将快照合并回原对象
        /// </summary>
        void MergeSnapshot(IRepository repo);  //这里使用不限定Entity类型的Repository，因为Merge方法中可能需要操作主表和字表等多个实体


        ///// <summary>
        ///// 修改记录（正常情况下只有1条记录，需不需要查询所有的历史变更记录？待定）  //TODO
        ///// </summary>
        //List<T> Updates { get; set; }
    }
}
